home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Communications / aa_m68k_Intel_HP_Only / RBrowser.0.97 / fixedit.sh next >
Linux/UNIX/POSIX Shell Script  |  1995-06-12  |  4KB  |  164 lines

  1. #!/bin/sh
  2. : Patch Edit.app to always instantiate NXDataLinkManager
  3. : Eric P. Scott, San Francisco State University, August 1994
  4. PATH=/bin:/usr/ucb:/usr/bin; export PATH
  5. echo One moment while I check which version you have... >&2
  6. case @`sum /NextApps/Edit.app/Edit` in
  7. @) exit 1 ;;
  8. @55340\ \ \ 356) EDITVER=31M; echo 3.1/m68k OK >&2 ;;
  9. @37609\ \ \ 380) EDITVER=31I; echo 3.1/i386 OK >&2 ;;
  10. @14017\ \ \ 356) EDITVER=32M; echo 3.2/m68k OK >&2 ;;
  11. @60216\ \ \ 372) EDITVER=32I; echo 3.2/i386 OK >&2 ;;
  12. @05011\ \ \ 437) EDITVER=Blaze2C; echo 3.2prerelease/hppa OK >&2 ;;
  13. @60955\ \ \ 437) EDITVER=Blaze2X; echo 3.2hp OK >&2 ;;
  14. @35153\ \ \ 401) 
  15.   echo Ick.\  You\'re running 3.0.\  You need 3.1 or 3.2. >&2
  16.   exit 1 ;;
  17. *) echo Wrong Edit version for this procedure.\  Sorry. >&2
  18.   exit 1 ;;
  19. esac
  20. if [ ! -f /bin/cc ]; then
  21.   echo You don\'t have a C compiler.\  Can\'t continue. >&2
  22.   exit 1
  23. fi
  24. echo "" >&2
  25. echo This procedure will make a copy of the NeXT Edit application that >&2
  26. echo will work properly with RBrowser.\  It will not alter the original >&2
  27. echo Edit.app in any way.\  This copy will contain revised object code >&2
  28. echo and symbolic links to the original files.\  You must destroy this >&2
  29. echo copy if you change operating system releases, or install or >&2
  30. echo deinstall language packages \(but you can run this script again >&2
  31. echo to generate a fresh copy\). >&2
  32. echo "" >&2
  33. while :
  34. do
  35.   echo -n "Installation directory [~/Apps]: " >&2
  36.   if read dir; then :; else echo >&2; exit 1; fi
  37.   case @$dir in
  38.   @) dir=${HOME?}/Apps ;;
  39.   *) ;;
  40.   esac
  41.   if [ -d $dir ]; then
  42.     if [ -w $dir ]; then break; fi
  43.     echo $dir isn\'t writable >&2
  44.   elif [ -f $dir ]; then
  45.     echo $dir exists, but it\'s not a directory >&2
  46.   else
  47.     echo $dir doesn\'t exist >&2
  48.   fi
  49.   echo "" >&2
  50.   echo Try something else or type Control-D to exit. >&2
  51. done
  52. cd $dir
  53. case $dir in
  54. /*) ;;
  55. *) dir="`pwd`" ;;
  56. esac
  57. umask 022
  58. mkdir Edit.app||exit 1
  59. echo Copying files... >&2
  60. cd Edit.app
  61. ln -s /NextApps/Edit.app/* .
  62. rm -f Edit
  63. cp -p /NextApps/Edit.app/Edit .
  64. echo Compiling binary patcher... >&2
  65. cd /tmp
  66. cat <<\INTELSUX >mangle$$.c
  67. #include <stdio.h>
  68. struct subs {
  69.     long offset;
  70.     int old, new;
  71. } subs[]={
  72. #ifdef EDITVER31M
  73.     { 28251L, 'g', 'N' },
  74.     { 28252L, '\f', 'q' },
  75.     { 31989L, 'g', 'N' },
  76.     { 31990L, '>', 'q' },
  77.     { 364121L, EOF, EOF }
  78. #endif
  79. #ifdef EDITVER31I
  80.     { 30572L, 't', '\220' },
  81.     { 30573L, '\020', '\220' },
  82.     { 34948L, 't', '\220' },
  83.     { 34949L, 'K', '\220' },
  84.     { 388345L, EOF, EOF }
  85. #endif
  86. #ifdef EDITVER32M
  87.     { 27439L, 'g', 'N' },
  88.     { 27440L, '\f', 'q' },
  89.     { 31461L, 'g', 'N' },
  90.     { 31462L, '>', 'q' },
  91.     { 364501L, EOF, EOF }
  92. #endif
  93. #ifdef EDITVER32I
  94.     { 30676L, 't', '\220' },
  95.     { 30677L, '\020', '\220' },
  96.     { 35104L, 't', '\220' },
  97.     { 35105L, 'G', '\220' },
  98.     { 380533L, EOF, EOF }
  99. #endif
  100. #ifdef EDITVERBlaze2C
  101.     { 46381L, 0206, '\b' },
  102.     { 46382L, '`', '\0' },
  103.     { 46383L, ' ', '\002' },
  104.     { 46384L, ' ', '@' },
  105.     { 52617L, 0206, '\b' },
  106.     { 52618L, '`', '\0' },
  107.     { 52619L, ' ', '\002' },
  108.     { 52620L, 0272, '@' },
  109.     { 447405L, EOF, EOF }
  110. #endif
  111. #ifdef EDITVERBlaze2X
  112.     { 46981L, 0206, '\b' },
  113.     { 46982L, '`', '\0' },
  114.     { 46983L, ' ', '\002' },
  115.     { 46984L, ' ', '@' },
  116.     { 53209L, 0204, '\b' },
  117.     { 53210L, 0240, '\0' },
  118.     { 53211L, ' ', '\002' },
  119.     { 53212L, 0272, '@' },
  120.     { 447465L, EOF, EOF }
  121. #endif
  122. };
  123. main() {
  124.     int c;
  125.     long pos;
  126.     struct subs *s=subs;
  127.  
  128.     for (pos=0L;(c=getchar())!=EOF;) {
  129.         if (++pos==s->offset) {
  130.             if (c!=s->old) {
  131.                 (void)fprintf(stderr, "mismatch at %ld\n",
  132.                     pos);
  133.                 exit(1);
  134.             }
  135.             c=s++->new;
  136.         }
  137.         putchar(c);
  138.     }
  139.     if (++pos!=s->offset) {
  140.         (void)fputs("premature EOF\n", stderr);
  141.         exit(1);
  142.     }
  143.     exit(0);
  144. }
  145. INTELSUX
  146. cc -o .mangle$$ -s -object -O -bsd -DEDITVER${EDITVER?} mangle$$.c||exit 1
  147. rm -f mangle$$.c
  148. echo Generating patched Edit executable... >&2
  149. cd $dir
  150. /tmp/.mangle$$ </NextApps/Edit.app/Edit >Edit.app/Edit||rm -rf Edit.app
  151. rm -f /tmp/.mangle$$
  152. if [ -d Edit.app ]; then
  153.   echo Installation complete >&2
  154.   echo "" >&2
  155.   echo If you have /NextApps/Edit.app in your dock, remove it. >&2
  156.   echo You\'ll need to dock the new Edit.app unless it resides in one of >&2
  157.   echo your ApplicationPaths folders that\'s searched ahead of /NextApps >&2
  158.   echo \(this generally means \~/Apps or /LocalApps\).\  I suggest >&2
  159.   echo docking it in any case. >&2
  160. else
  161.   echo Installation FAILED >&2
  162.   exit 1
  163. fi
  164.